$mysqli = new mysqli('yncoinfo.ipagemysql.com', 'socialn', '1234', 'socialn');
class users {
public function get_id() {
$id = $_COOKIE['login-id'];
$compile = explode('-',$id);
$return = $compile[0];
return $return;
}
public function get_info($id) {
$query = $mysqli->query("SELECT * FROM users WHERE id='$id'");
$return = $query->fetch_array();
return $return;
}
public function set_cookie($username) {
$return = 0;
$query = $mysqli->query("SELECT id FROM users WHERE username='$username'");
$oid = $query->fetch_array();
if(empty($oid)) {
$return = 1;
}
$id = $oid['id'];
if(isset($_COOKIE['login-id']) && $return == 0) {
$return = 2;
}
else {
if($return == 0) {
setcookie('login-id', $username.'-'.hash('sha256', $username.$id),time()+60*60*24*30*12*10);
$return == 3;
}
}
return $return;
}
}
$users = new users();
echo $users->set_cookie('admin');
ואני לא מצליח להבין מה לא נכון, האם בכלל עשיתי את זה כמו שצריך?
11 תשובות
לא קראתי את כל הקוד, אבל הגעתי לשורה השלישית ולא הבנתי משהו:
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
אתה יצרת מופע של המחלקה mysqli ולא משתמש בה כאן?
@zacharya את הקוד הזה ספציפית העתקתי מאיפה שהוא שניסיתי למצוא פתרון ולא הצלחתי, זאת שורה לא חשובה ואני ימחק אותה
אתה יכול לשים פשוט:
exit("Connect failed: \n". mysqli->connect_error);
עכשיו אני די בטוח שהבעיה היא פשוט שאתה יוצר את המחלקה mysqli מחוץ למחלקה users ככה כשאתה יוצר מופע של המחלקה ומפעיל את המתודה set_cookie אין לה שמץ מזה המשתנה הזה $mysqli, פשוט תעביר את המשתנה $mysqli ביצירה של המופע ובעזרת הconstruct תכניס אותו למאפיין של המחלקה.
@zacharya ניסיתי את זה, זה הגיע עכשיו כאשר היה קיים לי cookie ל-2 במשתנה return (כלומר הוא מצליח להגיע) אבל כאשר מחקתי את העוגיה וניסיתי שהוא יעשה set מחדש זה לא עבד
למחלקה users אין בכלל גישה למשתנה mysqli
אם העתקת את הקוד מהאתר - שלח לי קישור. הגיע הזמן למחוק את זה, אחרת עוד מישהו יעתיק את זה.
@zacharya , @intval
עכשיו הקוד בסדר?
class users {
public function get_id() {
$id = $_COOKIE['login-id'];
$compile = explode('-',$id);
$return = $compile[0];
return $return;
}
public function get_info($id) {
$query = this->mysqli->query("SELECT * FROM users WHERE id='$id'");
$return = $query->fetch_array();
return $return;
}
public function set_cookie($username) {
$return = 0;
$query = this->mysqli->query("SELECT id FROM users WHERE username='$username'");
$oid = $query->fetch_array();
if(empty($oid)) {
$return = 1;
}
$id = $oid['id'];
if(empty($id)) {
$return = 1;
}
if(isset($_COOKIE['login-id']) && $return == 0) {
$return = 2;
}
else {
if($return != 1) {
setcookie('login-id', $username.'-'.hash('sha256', $username.$id),time()+60*60*24*30*12*10);
$return == 3;
}
}
return $return;
}
public __construct($mysqli)
{
$this->mysqli = $mysqli;
}
}
רשמת this במקום $this, וזה גם צריך להיות function __construct ולא רק __construct (אני די בטוח בזה. למרות שבתשובה שלו אלכס כתב אחרת ככה שאני לא בטוח לגמרי).
בעיקרון אני לא רואה בעיה בקוד.
או חוץ מזה שלא יצרת מאפיין בכלל של mysqli - ככה (מחוץ למתודה):